﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using GeneralDataAccess;
using Rsa.DataAccess.Models;

namespace Rsa.DataAccess {
    public class UsuarioDa : DataAccessBase {

        // Siempre tiene que haber el constructor que reciba el ConnectionString
        public UsuarioDa(string pConnectionString) : base(pConnectionString) { }
        
        public void AdicionarUsuario(Usuario pUsuario) {
            IniciarConsulta(); // Ejecutar siempre para no tener problemas
            AdicionarParametro("@Username", pUsuario.Username);
            AdicionarParametro("@Nombre", pUsuario.Nombre);
            AdicionarParametro("@Apellidos", pUsuario.Apellidos);
            AdicionarParametro("@Email", pUsuario.Email);
            AdicionarParametro("@Password", pUsuario.Password); // El password se encriptara en el SP
            AdicionarParametro("@Sexo", pUsuario.Sexo);
            AdicionarParametro("@FechaNacimiento", pUsuario.FechaNacimiento);

            try {
                string spName = "AdicionarUsuario";
                ExecuteNonQuery(spName, System.Data.CommandType.StoredProcedure);
            }
            catch (Exception ex) {
                throw ex;
            }
        }
        public Usuario GetUsuarioByUsername(string pUsername) {
            IniciarConsulta();
            AdicionarParametro("@Username", pUsername.ToLower());

            try {
                string spName = "GetUsuarioByUsername";
                return GetObject<Usuario>(spName, CommandType.StoredProcedure);
            }
            catch (Exception ex) {
                throw ex;
            }
        }

        public Usuario GetUsuarioByEmail(string pEmail) {
            IniciarConsulta();
            AdicionarParametro("@Email", pEmail);

            try {
                string spName = "GetUsuarioByEmail";
                return GetObject<Usuario>(spName, CommandType.StoredProcedure);
            }
            catch (Exception ex) {
                throw ex;
            }
        }

        public Usuario GetUsuario(string pUsername) {
            return GetUsuarioByUsername(pUsername);
        }

        public bool ValidateUser(string pUsername, string pPassword) {
            IniciarConsulta();
            AdicionarParametro("@Username", pUsername);
            AdicionarParametro("@Password", pPassword);

            try {
                string spName = "ValidateUser";
                return ExecuteScalar<bool>(spName, CommandType.StoredProcedure);
            }
            catch (Exception ex) {
                throw ex;
            }
        }
    }
}
